﻿#define CLASS

namespace MyNamespace
{

    using System;
    using System.Collections.Generic;
    using System.Globalization;
    using System.Linq;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Text;
    using System.Threading.Tasks;
#if CLASS

    class Test
    {
        public void deneme()
        {

            try
            {
                deneme2();
            }
            catch (Exception ex)
            {

                throw;
            }
        }

        public void deneme2()
        {
            try
            {
                deneme3();
            }
            catch (Exception ex)
            {
                throw;
            }
        }

        public void deneme3()
        {
            try
            {
                throw new IndexOutOfRangeException();
            }
            catch (Exception ex)
            {

                throw ex;
            }
        }


    }

    class Program
    {
        public delegate object ShowMessage(string message);

        public static object deneme(string s)
        {
            return null;
        }

        public static object deneme2(string s)
        {
            return s + "dsafsd";
        }

        public static object deneme3(ShowMessage del, string s)
        {
            return del(s);
        }

        static void Main()
        {

            ShowMessage den = deneme;

            var d = den("denemdsfa");

            den = deneme2;

            den("dfasdf");

            deneme3(deneme2, "");

            //Test t = new Test();
            //t.deneme();

            ////============[REFERENCE TYPE ON MEMORY]=============
            //Deneme d = new Deneme();

            //d.Item1 = "1";
            //d.Item2 = "2";

            //Deneme d1 = d;

            //d1.Item1 = "3";
            //d1.Item2 = "4";

            //Proc(d1);

            ////============[VALUE TYPE ON MEMORY]=============
            //DenemeSTR ds = new DenemeSTR();
            //ds.Item1 = "s1";
            //ds.Item2 = "s2";
            //DenemeSTR ds1 = ds;
            //ds1.Item1 = "s3";
            //ds1.Item2= "s4";

            //ProcS(ds1);

            //ProcS(ref ds1);
        }



        static void Proc(Deneme d)
        {
            d.Item1 = "5";
            d.Item2 = "6";
        }

        static void ProcS(DenemeSTR d)
        {
            d.Item1 = "s5";
            d.Item2 = "s6";
        }


        static void ProcS(ref DenemeSTR d)
        {
            d.Item1 = "s5";
            d.Item2 = "s6";
        }
    }

    class Deneme
    {
        public string Item1 { get; set; }
        public string Item2 { get; set; }
    }

    struct DenemeSTR
    {
        public string Item1 { get; set; }
        public string Item2 { get; set; }
    }

#else   

    class Program
    {
        public static string DENEME1="FAT";
        public const string DENEME2="SE";
        
        static void Main()
        {
            foreach (var item in Get())
            {
                Console.WriteLine(item);
            }

            Console.ReadKey();

        }

        static IEnumerable<string> Get()
        {
            yield return "fatih";
            yield return "sert";
            yield return "deneme";
        }
    }

#endif

}



//using System;
//using System.Collections.Generic;
//using System.Globalization;
//using System.Linq;
//using System.Runtime.Serialization.Formatters.Binary;
//using System.Text;
//using System.Threading.Tasks;

//namespace IvırZıvır
//{
//    class Program
//    {


//        static void Main()
//        {
//            // Display powers of 2 up to the exponent of 8:
//            //foreach (int i in Power(2, 8))
//            //{
//            //    Console.Write("{0} ", i);
//            //}
//        }

//        //public static IEnumerable<int> Power(int number, int exponent)
//        //{
//        //    int result = 1;

//        //    for (int i = 0; i < exponent; i++)
//        //    {
//        //        result = result * number;
//        //        yield return result;
//        //    }
//        //}

//        //static void Main(string[] args)
//        //{
//        //    //var value = "1.000";

//        //    //var dec = Convert.ToDecimal(value);
//        //    //Console.WriteLine(dec);

//        //    //BinaryFormatter form = new BinaryFormatter();
//        //    //var bla = "123456789012345";

//        //    //Console.WriteLine(bla.Substring(11));

//        //    //object bla = null;

//        //    //var da = bla as string;
//        //    //var da1 = (string)bla;

//        //    //MyClass m = new MyClass();
//        //    //m.MyProperty = "a";

//        //    //Deneme(m);


//        //    Console.ReadLine();
//        //}

//        //static void Deneme( MyClass a)
//        //{
//        //    a.MyProperty = "123123";
//        //}

//    }

//    //class MyClass
//    //{
//    //    public string MyProperty { get; set; }
//    //}
//}
